package insight.google.game.era.client.proxy;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;

import insight.google.game.era.bo.GameUser;
import insight.google.game.era.bo.card.CharacterCard;
import insight.google.game.era.bo.card.GameCard;
import insight.google.game.era.bo.card.RoleCard;

import org.directwebremoting.proxy.ScriptProxy;

public interface PlayerClientProxy extends ClientProxy {
	
	void dispatchCard(ScriptProxy userProxy, String jsComponentId,Collection<GameCard> card);
	void dispatchRoleCard(ScriptProxy userProxy, String jsComponentId,RoleCard card, long dataVersion);
	void displayLifeCount(ScriptProxy userProxy, String jsComponentId,GameUser user);
	void showRoleCard(ScriptProxy userProxy, String jsComponentId,GameUser kingUser);
	
	void recieveCard(ScriptProxy userProxy, String jsComponentId,Collection<GameCard> card);
	void playTurnNotification(ScriptProxy userProxy, String jsComponentId);
	void healthUpdate(ScriptProxy userProxy, String jsComponentId,int count);
	
	void attackCardPolicyExe(ScriptProxy userProxy, String jsComponentId,String matchMethod, String orgUser, String cardType);
    void milkCardPolicyExe(ScriptProxy userProxy, String jsComponentId,String matchMethod, int count);
	void duelCardPolicyExe(ScriptProxy userProxy, String jsComponentId,String matchMethod, String orgUser, String cardType);
	
    void readyToPlay(ScriptProxy userProxy, String jsComponentId);
    void setActive(ScriptProxy userProxy, String jsComponentId, boolean isActive);
    void setActiveCard(ScriptProxy userProxy, String jsComponentId, List<String> activeCards);

    void healLife(ScriptProxy userProxy, String jsComponentId, int count);
    void recievePlayerCard(ScriptProxy userProxy, String jsComponentId, List<GameCard> cardList);
    
    void dispatchCharacterCard(ScriptProxy userProxy, String jsComponentId,CharacterCard card, long dataVersion);
    void showCharacterCardToUser(ScriptProxy userProxy, String jsComponentId,GameUser user);
    void showCardToUser(ScriptProxy userProxy, String jsComponentId,HashMap<String, String> data);

    void enablePolicyExec(ScriptProxy userProxy, String jsComponentId, GameUser user);
    
    void registerAttackableUser(ScriptProxy userProxy, String jsComponentId, Collection<GameUser> user);

    void selectDropCard(ScriptProxy userProxy, String jsComponentId, int cardCount);
    
    void finishExecPolicy(ScriptProxy userProxy, String jsComponentId);
    void finishDropCard(ScriptProxy userProxy, String jsComponentId);

    void removeClientSelectedCard(ScriptProxy userProxy, String jsComponentId);

    void replaceEquipmentCard(ScriptProxy userProxy, String jsComponentId, GameCard card );
    
    void removeClientCard(ScriptProxy userProxy, String jsComponentId);
    
    void updateUIforProfile(ScriptProxy userProxy, String jsComponentId, Object data);
    void notifyOtherUserForUpdatedProfile(ScriptProxy userProxy, String jsComponentId, Object data);
    void askCardDiscardExec(ScriptProxy userProxy, String jsComponentId,String matchMethod, String orgUser, String cardType);

    void askSaveSelfExec(ScriptProxy userProxy, String jsComponentId);

    void clearClientByDead(ScriptProxy userProxy, String jsComponentId);

	void refreshEquipmentCard(ScriptProxy userProxy, String jsComponentId,List<GameCard> cardList);
}
